/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package client.gui;

import client.gui.controls.scrabble.Hokje;
import client.gui.controls.scrabble.Blokje;
import client.gui.controls.scrabble.Vakje;
import client.controllers.ScrabbleController;
import client.communication.ClientCommunication;
import java.awt.Point;
import javax.swing.*;

/**
 *
 * @author Liesbeth
 */
public class SpelbordScrabble extends JPanel {

    private Hokje[][] moHokjes = new Hokje[15][15];

    public SpelbordScrabble() {

        this.setLayout(new java.awt.GridLayout(15, 15, 2, 2));
        PlaatsVakjesOpSpelBord();
    }

    //positioneer alle vakjes op het spelbord
    private void PlaatsVakjesOpSpelBord() {
        for (int i = 0; i < getHokjes().length; i++) {
            for (int j = 0; j < getHokjes()[i].length; j++) {
                moHokjes[i][j] = MaakVakje(i, j);
                this.add(getHokjes()[i][j]);
            }
        }
    }

    public void plaatsBlokjeOpSpelbord(Point positie, Point OudePositie, String letter, boolean blanco) {
        Blokje b = new Blokje(letter);
        b.setGevalideerd(true);
        b.setBlancoBlokje(blanco);
        b.setWaarde(ClientCommunication.getInstance().getLetterWaardes().get(letter));
        if (OudePositie.x != -1) { //wanneer een blokje verplaatst is
            //het blokje moet van de oude pos verwijderd worden en daarna naar de nieuwe pos geplaatst worden
            Hokje hOud = getHokjes()[OudePositie.x][OudePositie.y];
            if (hOud != null) {
                hOud.setVakjeOfBlokje(hOud.getVakje());//blokje wordt verwijderd en vervangen door een vakje         
                hOud.revalidate();
                ScrabbleController.getInstance().removeBezetVakje(hOud.getLocatie());
                ScrabbleController.getInstance().removeNietGevalideerdVakje(hOud);;
            }
        }
        //wanneer oudepos.x = -1 betekent dit dat het blokje afkomstig is van het plankje 
        //en zodus moeten er geen blokjes van het spelbord verwijderd worden

        if (positie.x != -1) {
            //wanneer een blokje NIET terug naar het plankje gesleept is
            Hokje h = getHokjes()[positie.x][positie.y];
            h.setVakjeOfBlokje(b);
            h.revalidate();
            ScrabbleController.getInstance().addNietGevalideerdVakje(h);
            ScrabbleController.getInstance().addBezetVakje(h);
        }
    }

    //bepaalt welk soort vakje het is
    private Hokje MaakVakje(int rij, int kolom) {
        if (((rij == 2 || rij == 12) && (kolom == 6 || kolom == 8)) ||
                ((rij == 3 || rij == 11) && (kolom == 0 || kolom == 7 || kolom == 14)) ||
                ((rij == 6 || rij == 8) && (kolom == 2 || kolom == 6 || kolom == 8 || kolom == 12)) ||
                rij % 7 == 0 && (kolom == 3 || kolom == 11)) {
            return new Hokje(Vakje.Type.TWEE_MAAL_LETTERWAARDE, new Point(rij, kolom));
        } else if (((rij == 1 || rij == 13) && (kolom == 1 || kolom == 13)) ||
                ((rij == 2 || rij == 12) && (kolom == 2 || kolom == 12)) ||
                ((rij == 3 || rij == 11) && (kolom == 3 || kolom == 11)) ||
                ((rij == 4 || rij == 10) && (kolom == 4 || kolom == 10))) {
            return new Hokje(Vakje.Type.TWEE_MAAL_WOORDWAARDE, new Point(rij, kolom));
        } else if (rij % 7 == 0 && kolom % 7 == 0) {
            if (rij == 7 && kolom == 7) {
                return new Hokje(Vakje.Type.MIDDEN, new Point(rij, kolom));
            } else {
                return new Hokje(Vakje.Type.DRIE_MAAL_WOORDWAARDE, new Point(rij, kolom));
            }
        } else if (((rij == 1 || rij == 5 || rij == 9 || rij == 13) && (kolom == 5 || kolom == 9)) ||
                ((rij == 5 || rij == 9) && (kolom == 1 || kolom == 13))) {
            return new Hokje(Vakje.Type.DRIE_MAAL_LETTERWAARDE, new Point(rij, kolom));
        } else {
            return new Hokje(Vakje.Type.NORMAAL, new Point(rij, kolom));
        }
    }

    public Hokje[][] getHokjes() {
        return moHokjes;
    }
}
